package org.fisco.bcos.asset.contract;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.abi.FunctionReturnDecoder;
import org.fisco.bcos.sdk.abi.TypeReference;
import org.fisco.bcos.sdk.abi.datatypes.Address;
import org.fisco.bcos.sdk.abi.datatypes.Bool;
import org.fisco.bcos.sdk.abi.datatypes.DynamicArray;
import org.fisco.bcos.sdk.abi.datatypes.Event;
import org.fisco.bcos.sdk.abi.datatypes.Function;
import org.fisco.bcos.sdk.abi.datatypes.Type;
import org.fisco.bcos.sdk.abi.datatypes.Utf8String;
import org.fisco.bcos.sdk.abi.datatypes.generated.Uint256;
import org.fisco.bcos.sdk.abi.datatypes.generated.Uint8;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple3;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple4;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple5;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple6;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple7;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple8;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.contract.Contract;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.eventsub.EventCallback;
import org.fisco.bcos.sdk.model.CryptoType;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class CharityDonation extends Contract {
    public static final String[] BINARY_ARRAY = {"608060405234801561001057600080fd5b5033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360048111156100ae57fe5b0217905550613cbe806100c26000396000f300608060405260043610610128576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630cdd53f61461012d578063213fbf1b1461015657806336fbad261461017f578063445bb227146101aa5780634b720bbf146101e9578063501bc5541461022d57806350c0d5a41461025d57806355133f791461028e5780635f8439e3146102b75780636591b3fb146102fa57806374d5e100146103395780638adac83814610376578063948cf9111461039f578063cdd8b2b2146103de578063cde0a4f814610407578063dd8fee1414610430578063dfefadff1461045b578063e2aad4a01461049c578063e43826d8146104c7578063f2ef441b14610504578063fc69d83614610535578063fe2ecd791461055e575b600080fd5b34801561013957600080fd5b50610154600480360361014f9190810190612ed8565b610589565b005b34801561016257600080fd5b5061017d60048036036101789190810190612e73565b610837565b005b34801561018b57600080fd5b506101946109e7565b6040516101a1919061398e565b60405180910390f35b3480156101b657600080fd5b506101d160048036036101cc9190810190612d63565b6109ed565b6040516101e093929190613a47565b60405180910390f35b3480156101f557600080fd5b50610210600480360361020b9190810190612e73565b610a17565b604051610224989796959493929190613742565b60405180910390f35b34801561023957600080fd5b50610242610bc9565b60405161025496959493929190613533565b60405180910390f35b34801561026957600080fd5b50610272610fa8565b60405161028597969594939291906135be565b60405180910390f35b34801561029a57600080fd5b506102b560048036036102b09190810190612d8c565b61151e565b005b3480156102c357600080fd5b506102de60048036036102d99190810190612e73565b6117bd565b6040516102f197969594939291906136c5565b60405180910390f35b34801561030657600080fd5b50610321600480360361031c9190810190612d63565b6119d0565b60405161033093929190613a47565b60405180910390f35b34801561034557600080fd5b50610360600480360361035b9190810190612d63565b611a34565b60405161036d91906136aa565b60405180910390f35b34801561038257600080fd5b5061039d60048036036103989190810190612e1f565b611a54565b005b3480156103ab57600080fd5b506103c660048036036103c19190810190612e73565b611c3d565b6040516103d59392919061365e565b60405180910390f35b3480156103ea57600080fd5b5061040560048036036104009190810190612d63565b611e70565b005b34801561041357600080fd5b5061042e60048036036104299190810190612d63565b611f7b565b005b34801561043c57600080fd5b50610445612139565b60405161045291906134be565b60405180910390f35b34801561046757600080fd5b50610482600480360361047d9190810190612e73565b61215f565b6040516104939594939291906134d9565b60405180910390f35b3480156104a857600080fd5b506104b161225a565b6040516104be919061398e565b60405180910390f35b3480156104d357600080fd5b506104ee60048036036104e99190810190612e9c565b612260565b6040516104fb919061398e565b60405180910390f35b34801561051057600080fd5b50610519612303565b60405161052c97969594939291906135be565b60405180910390f35b34801561054157600080fd5b5061055c60048036036105579190810190612e73565b6127d2565b005b34801561056a57600080fd5b506105736129be565b60405161058091906134be565b60405180910390f35b6000600454831015156105d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c89061394e565b60405180910390fd5b6000808481526020019081526020016000209050600160038111156105f257fe5b8160050160009054906101000a900460ff16600381111561060f57fe5b141515610651576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106489061390e565b60405180910390fd5b600082111515610696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068d9061382e565b60405180910390fd5b818160080160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550818160040160008282540192505081905550806009016060604051908101604052808481526020014281526020013373ffffffffffffffffffffffffffffffffffffffff1681525090806001815401808255809150509060018203906000526020600020906003020160009091929091909150600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050507fe555da28bdb778f65d22794d88927ebaeca03f7de9d1b7d39245bc8fb5ca078a8333846040516107e9939291906139d2565b60405180910390a1806003015481600401541015156108325760028160050160006101000a81548160ff0219169083600381111561082357fe5b0217905550610831836129e4565b5b505050565b60006003600481111561084657fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600481111561089e57fe5b1415156108e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d7906138ee565b60405180910390fd5b60055482101515610926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091d906138ae565b60405180910390fd5b6002600083815260200190815260200160002090508060030160009054906101000a900460ff1615151561098f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109869061384e565b60405180910390fd5b60018160030160006101000a81548160ff0219169083151502179055507f18592c970423719446e8cd1db0f88689331b2c81690e4d59376e8481e36b65ee826040516109db919061398e565b60405180910390a15050565b60045481565b60036020528060005260406000206000915090508060000154908060010154908060020154905083565b6000602052806000526040600020600091509050806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ac35780601f10610a9857610100808354040283529160200191610ac3565b820191906000526020600020905b815481529060010190602001808311610aa657829003601f168201915b505050505090806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b615780601f10610b3657610100808354040283529160200191610b61565b820191906000526020600020905b815481529060010190602001808311610b4457829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040154908060050160009054906101000a900460ff16908060060154908060070160009054906101000a900460ff16905088565b606080606080606080600080600060036004811115610be457fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166004811115610c3c57fe5b141515610c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c75906138ee565b60405180910390fd5b600554925082604051908082528060200260200182016040528015610cb25781602001602082028038833980820191505090505b50985082604051908082528060200260200182016040528015610ce45781602001602082028038833980820191505090505b50975082604051908082528060200260200182016040528015610d1b57816020015b6060815260200190600190039081610d065790505b50965082604051908082528060200260200182016040528015610d4d5781602001602082028038833980820191505090505b50955082604051908082528060200260200182016040528015610d7f5781602001602082028038833980820191505090505b50945082604051908082528060200260200182016040528015610db15781602001602082028038833980820191505090505b509350600091505b82821015610f9d57600260008381526020019081526020016000209050818983815181101515610de557fe5b90602001906020020181815250508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168883815181101515610e2657fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610efa5780601f10610ecf57610100808354040283529160200191610efa565b820191906000526020600020905b815481529060010190602001808311610edd57829003601f168201915b50505050508783815181101515610f0d57fe5b9060200190602002018190525080600201548683815181101515610f2d57fe5b90602001906020020181815250508060","030160009054906101000a900460ff168583815181101515610f5b57fe5b906020019060200201901515908115158152505080600401548483815181101515610f8257fe5b90602001906020020181815250508180600101925050610db9565b505050909192939495565b60608060608060608060606000806000806000600480811115610fc757fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600481111561101f57fe5b141515611061576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611058906138ce565b60405180910390fd5b60009450600093505b6004548410156110cb576000600381111561108157fe5b60008086815260200190815260200160002060050160009054906101000a900460ff1660038111156110af57fe5b14156110be5784806001019550505b838060010194505061106a565b846040519080825280602002602001820160405280156110fa5781602001602082028038833980820191505090505b509b508460405190808252806020026020018201604052801561113157816020015b606081526020019060019003908161111c5790505b509a508460405190808252806020026020018201604052801561116857816020015b60608152602001906001900390816111535790505b5099508460405190808252806020026020018201604052801561119a5781602001602082028038833980820191505090505b509850846040519080825280602002602001820160405280156111cc5781602001602082028038833980820191505090505b509750846040519080825280602002602001820160405280156111fe5781602001602082028038833980820191505090505b509650846040519080825280602002602001820160405280156112305781602001602082028038833980820191505090505b50955060009250600091505b600454821015611510576000600381111561125357fe5b60008084815260200190815260200160002060050160009054906101000a900460ff16600381111561128157fe5b1415611503576000808381526020019081526020016000209050818c848151811015156112aa57fe5b9060200190602002018181525050806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113505780601f1061132557610100808354040283529160200191611350565b820191906000526020600020905b81548152906001019060200180831161133357829003601f168201915b50505050508b8481518110151561136357fe5b90602001906020020181905250806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114085780601f106113dd57610100808354040283529160200191611408565b820191906000526020600020905b8154815290600101906020018083116113eb57829003601f168201915b50505050508a8481518110151561141b57fe5b906020019060200201819052508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16898481518110151561145b57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050806003015488848151811015156114aa57fe5b9060200190602002018181525050806004015487848151811015156114cb57fe5b9060200190602002018181525050806006015486848151811015156114ec57fe5b906020019060200201818152505082806001019350505b818060010192505061123c565b505050505090919293949596565b6000806003600481111561152e57fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600481111561158657fe5b1415156115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf906138ee565b60405180910390fd5b60008311151561160d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116049061396e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561167f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611676906137ce565b60405180910390fd5b600460008154809291906001019190505591506000808381526020019081526020016000209050858160000190805190602001906116be929190612bc0565b50848160010190805190602001906116d7929190612bc0565b50838160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508281600301819055506000816004018190555060008160050160006101000a81548160ff0219169083600381111561174f57fe5b021790555042816006018190555060008160070160006101000a81548160ff0219169083151502179055507f6245d01eb0db8df9242165c3ee1e2324367f93303d7b8f6a86e38a8767e643ae8287856040516117ad93929190613a09565b60405180910390a1505050505050565b6060806000806000806000806004548910151561180f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118069061394e565b60405180910390fd5b6000808a8152602001908152602001600020905080600001816001018260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836003015484600401548560050160009054906101000a900460ff168660070160009054906101000a900460ff16868054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119135780601f106118e857610100808354040283529160200191611913565b820191906000526020600020905b8154815290600101906020018083116118f657829003601f168201915b50505050509650858054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119af5780601f10611984576101008083540402835291602001916119af565b820191906000526020600020905b81548152906001019060200180831161199257829003601f168201915b50505050509550975097509750975097509750975050919395979092949650565b600080600080600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015481600101548260020154935093509350509193909250565b60016020528060005260406000206000915054906101000a900460ff1681565b600060026004811115611a6357fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166004811115611abb57fe5b141515611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af4906137ee565b60405180910390fd5b6005600081548092919060010191905055905060a0604051908101604052803373ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001600015158152602001428152506002600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019080519060200190611bc7929190612c40565b506040820151816002015560608201518160030160006101000a81548160ff021916908315150217905550608082015181600401559050507f394b2f46e841d2b670718e98a15dfb76853abc5a8761449c74e9cba62d9015218133604051611c309291906139a9565b60405180910390a1505050565b6060806060600080600060045487101515611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c849061394e565b60405180910390fd5b60008088815260200190815260200160002092508260090180549050915081604051908082528060200260200182016040528015611cda5781602001602082028038833980820191505090505b50955081604051908082528060200260200182016040528015611d0c5781602001602082028038833980820191505090505b50945081604051908082528060200260200182016040528015611d3e5781602001602082028038833980820191505090505b509350600090505b81811015611e66578260090181815481101515611d5f57fe5b9060005260206000209060030201600001548682815181101515611d7f57fe5b90602001906020020181815250508260090181815481101515611d9e57fe5b9060005260206000209060030201600101548582815181101515611dbe57fe5b90602001906020020181815250508260090181815481101515611ddd57fe5b906000526020600020906003020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168482815181101515611e1d57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050611d46565b5050509193909250565b60036004811115611e7d57fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166004811115611ed557fe5b141515611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e906138ee565b60405180910390fd5b6002600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffff","ffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836004811115611f7357fe5b021790555050565b60036004811115611f8857fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166004811115611fe057fe5b141515612022576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612019906138ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208b9061380e565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083600481111561213157fe5b021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122315780601f1061220657610100808354040283529160200191612231565b820191906000526020600020905b81548152906001019060200180831161221457829003601f168201915b5050505050908060020154908060030160009054906101000a900460ff16908060040154905085565b60055481565b6000600454831015156122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f9061394e565b60405180910390fd5b60008084815260200190815260200160002060080160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60608060608060608060606000806000806000809450600093505b60045484101561237f576001600381111561233557fe5b60008086815260200190815260200160002060050160009054906101000a900460ff16600381111561236357fe5b14156123725784806001019550505b838060010194505061231e565b846040519080825280602002602001820160405280156123ae5781602001602082028038833980820191505090505b509b50846040519080825280602002602001820160405280156123e557816020015b60608152602001906001900390816123d05790505b509a508460405190808252806020026020018201604052801561241c57816020015b60608152602001906001900390816124075790505b5099508460405190808252806020026020018201604052801561244e5781602001602082028038833980820191505090505b509850846040519080825280602002602001820160405280156124805781602001602082028038833980820191505090505b509750846040519080825280602002602001820160405280156124b25781602001602082028038833980820191505090505b509650846040519080825280602002602001820160405280156124e45781602001602082028038833980820191505090505b50955060009250600091505b6004548210156127c4576001600381111561250757fe5b60008084815260200190815260200160002060050160009054906101000a900460ff16600381111561253557fe5b14156127b7576000808381526020019081526020016000209050818c8481518110151561255e57fe5b9060200190602002018181525050806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126045780601f106125d957610100808354040283529160200191612604565b820191906000526020600020905b8154815290600101906020018083116125e757829003601f168201915b50505050508b8481518110151561261757fe5b90602001906020020181905250806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126bc5780601f10612691576101008083540402835291602001916126bc565b820191906000526020600020905b81548152906001019060200180831161269f57829003601f168201915b50505050508a848151811015156126cf57fe5b906020019060200201819052508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16898481518110151561270f57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508060030154888481518110151561275e57fe5b90602001906020020181815250508060040154878481518110151561277f57fe5b9060200190602002018181525050806006015486848151811015156127a057fe5b906020019060200201818152505082806001019350505b81806001019250506124f0565b505050505090919293949596565b60006004808111156127e057fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600481111561283857fe5b14151561287a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612871906138ce565b60405180910390fd5b600454821015156128c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b79061394e565b60405180910390fd5b6000808381526020019081526020016000209050600060038111156128e157fe5b8160050160009054906101000a900460ff1660038111156128fe57fe5b141515612940576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129379061388e565b60405180910390fd5b60018160050160006101000a81548160ff0219169083600381111561296157fe5b021790555060018160070160006101000a81548160ff0219169083151502179055507ffc534544f8ed1b516bf078b4ae88509d8f81f4fafefb10e9aad53e3e1fbce9bb826040516129b2919061398e565b60405180910390a15050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080848152602001908152602001600020915060026003811115612a0857fe5b8260050160009054906101000a900460ff166003811115612a2557fe5b141515612a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5e9061386e565b60405180910390fd5b60008260040154111515612ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa79061392e565b60405180910390fd5b81600401549050612ae58260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612b49565b7f6e3c6096795c8298a218b2cfb8bde42726ff7c9a3d27b4d3ba41ab7f74feb5fb838360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683604051612b3c939291906139d2565b60405180910390a1505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600001600082825401925050819055504281600101819055508060020160008154809291906001019190505550505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c0157805160ff1916838001178555612c2f565b82800160010185558215612c2f579182015b82811115612c2e578251825591602001919060010190612c13565b5b509050612c3c9190612cc0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c8157805160ff1916838001178555612caf565b82800160010185558215612caf579182015b82811115612cae578251825591602001919060010190612c93565b5b509050612cbc9190612cc0565b5090565b612ce291905b80821115612cde576000816000905550600101612cc6565b5090565b90565b6000612cf18235613be3565b905092915050565b600082601f8301121515612d0c57600080fd5b8135612d1f612d1a82613aab565b613a7e565b91508082526020830160208301858383011115612d3b57600080fd5b612d46838284613c31565b50505092915050565b6000612d5b8235613c03565b905092915050565b600060208284031215612d7557600080fd5b6000612d8384828501612ce5565b91505092915050565b60008060008060808587031215612da257600080fd5b600085013567ffffffffffffffff811115612dbc57600080fd5b612dc887828801612cf9565b945050602085013567ffffffffffffffff811115612de557600080fd5b612df187828801612cf9565b9350506040612e0287828801612ce5565b9250506060612e1387828801612d4f565b91505092959194509250565b60008060408385031215612e3257600080fd5b600083013567ffffffffffffffff811115612e4c57600080fd5b612e5885828601612cf9565b9250506020612e6985828601612d4f565b9150509250929050565b600060208284031215612e8557600080fd5b6000612e9384828501612d4f565b91505092915050565b60008060408385031215612eaf57600080fd5b6000612ebd85828601612d4f565b9250506020612ece85828601612ce5565b9150509250929050565b60008060408385031215612eeb57600080fd5b6000612ef985828601612d4f565b9250506020612f0a85828601612d4f565b9150509250929050565b612f1d81613b81565b82525050565b6000612f2e82613b0b565b808452602084019350612f4083613a","d7565b60005b82811015612f7257612f56868351612f14565b612f5f82613b4d565b9150602086019550600181019050612f43565b50849250505092915050565b6000612f8982613b16565b808452602084019350612f9b83613ae4565b60005b82811015612fcd57612fb18683516130a2565b612fba82613b5a565b9150602086019550600181019050612f9e565b50849250505092915050565b6000612fe482613b21565b80845260208401935083602082028501612ffd85613af1565b60005b84811015613036578383038852613018838351613105565b925061302382613b67565b9150602088019750600181019050613000565b508196508694505050505092915050565b600061305282613b2c565b80845260208401935061306483613afe565b60005b828110156130965761307a8683516134af565b61308382613b74565b9150602086019550600181019050613067565b50849250505092915050565b6130ab81613ba1565b82525050565b6130ba81613c0d565b82525050565b6130c981613c1f565b82525050565b60006130da82613b42565b8084526130ee816020860160208601613c40565b6130f781613c73565b602085010191505092915050565b600061311082613b37565b808452613124816020860160208601613c40565b61312d81613c73565b602085010191505092915050565b6000601b82527f496e76616c69642062656e6566696369617279206164647265737300000000006020830152604082019050919050565b6000601c82527f4f6e6c792062656e656669636961726965732063616e206170706c79000000006020830152604082019050919050565b6000600f82527f496e76616c6964206164647265737300000000000000000000000000000000006020830152604082019050919050565b6000602682527f446f6e6174696f6e20616d6f756e74206d75737420626520677265617465722060208301527f7468616e203000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000601c82527f4170706c69636174696f6e20616c726561647920617070726f766564000000006020830152604082019050919050565b6000601882527f50726f6a656374206973206e6f7420636f6d706c6574656400000000000000006020830152604082019050919050565b6000601682527f50726f6a656374206973206e6f742070656e64696e67000000000000000000006020830152604082019050919050565b6000601a82527f4170706c69636174696f6e20646f6573206e6f742065786973740000000000006020830152604082019050919050565b6000601c82527f4f6e6c7920726567756c61746f722063616e2063616c6c2074686973000000006020830152604082019050919050565b6000602782527f4f6e6c792063686172697479206f7267616e697a6174696f6e2063616e20636160208301527f6c6c2074686973000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000601582527f50726f6a656374206973206e6f742061637469766500000000000000000000006020830152604082019050919050565b6000601382527f4e6f2066756e647320746f2072656c65617365000000000000000000000000006020830152604082019050919050565b6000601682527f50726f6a65637420646f6573206e6f74206578697374000000000000000000006020830152604082019050919050565b6000602482527f54617267657420616d6f756e74206d757374206265206772656174657220746860208301527f616e2030000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6134b881613bd9565b82525050565b60006020820190506134d36000830184612f14565b92915050565b600060a0820190506134ee6000830188612f14565b81810360208301526135008187613105565b905061350f60408301866134af565b61351c60608301856130a2565b61352960808301846134af565b9695505050505050565b600060c082019050818103600083015261354d8189613047565b905081810360208301526135618188612f23565b905081810360408301526135758187612fd9565b905081810360608301526135898186613047565b9050818103608083015261359d8185612f7e565b905081810360a08301526135b18184613047565b9050979650505050505050565b600060e08201905081810360008301526135d8818a613047565b905081810360208301526135ec8189612fd9565b905081810360408301526136008188612fd9565b905081810360608301526136148187612f23565b905081810360808301526136288186613047565b905081810360a083015261363c8185613047565b905081810360c08301526136508184613047565b905098975050505050505050565b600060608201905081810360008301526136788186613047565b9050818103602083015261368c8185613047565b905081810360408301526136a08184612f23565b9050949350505050565b60006020820190506136bf60008301846130c0565b92915050565b600060e08201905081810360008301526136df818a6130cf565b905081810360208301526136f381896130cf565b90506137026040830188612f14565b61370f60608301876134af565b61371c60808301866134af565b61372960a08301856130b1565b61373660c08301846130a2565b98975050505050505050565b600061010082019050818103600083015261375d818b613105565b90508181036020830152613771818a613105565b90506137806040830189612f14565b61378d60608301886134af565b61379a60808301876134af565b6137a760a08301866130b1565b6137b460c08301856134af565b6137c160e08301846130a2565b9998505050505050505050565b600060208201905081810360008301526137e78161313b565b9050919050565b6000602082019050818103600083015261380781613172565b9050919050565b60006020820190508181036000830152613827816131a9565b9050919050565b60006020820190508181036000830152613847816131e0565b9050919050565b600060208201905081810360008301526138678161323d565b9050919050565b6000602082019050818103600083015261388781613274565b9050919050565b600060208201905081810360008301526138a7816132ab565b9050919050565b600060208201905081810360008301526138c7816132e2565b9050919050565b600060208201905081810360008301526138e781613319565b9050919050565b6000602082019050818103600083015261390781613350565b9050919050565b60006020820190508181036000830152613927816133ad565b9050919050565b60006020820190508181036000830152613947816133e4565b9050919050565b600060208201905081810360008301526139678161341b565b9050919050565b6000602082019050818103600083015261398781613452565b9050919050565b60006020820190506139a360008301846134af565b92915050565b60006040820190506139be60008301856134af565b6139cb6020830184612f14565b9392505050565b60006060820190506139e760008301866134af565b6139f46020830185612f14565b613a0160408301846134af565b949350505050565b6000606082019050613a1e60008301866134af565b8181036020830152613a3081856130cf565b9050613a3f60408301846134af565b949350505050565b6000606082019050613a5c60008301866134af565b613a6960208301856134af565b613a7660408301846134af565b949350505050565b6000604051905081810181811067ffffffffffffffff82111715613aa157600080fd5b8060405250919050565b600067ffffffffffffffff821115613ac257600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000600482101515613bbb57fe5b819050919050565b6000600582101515613bd157fe5b819050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613c1882613bad565b9050919050565b6000613c2a82613bc3565b9050919050565b82818337600083830152505050565b60005b83811015613c5e578082015181840152602081019050613c43565b83811115613c6d576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a7230582047634bc3c8e28cbf894758ec2e901c1532c4f23d5105af95ca027dce4d11b7b16c6578706572696d656e74616cf50037"};

    public static final String BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {"608060405234801561001057600080fd5b5033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360048111156100ae57fe5b0217905550613cbe806100c26000396000f300608060405260043610610128576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630b1024651461012d5780630f153fdf14610156578063125a62b61461017f5780632e31b231146101a85780633cd46895146101d957806341da48281461020257806347664298146102415780634d21337b1461026a578063506622e4146102a757806352d4c53f146102d2578063675bcfc0146102fb57806376439c421461033a57806376dc5ed21461037757806385f51abd146103b657806392b2c7c9146103e1578063934d994e1461040c57806394b51f831461043d578063a62238e91461046d578063b0149209146104ae578063c24d754d146104d9578063cd9561ac14610502578063fdbecf8014610546575b600080fd5b34801561013957600080fd5b50610154600480360361014f9190810190612e1f565b610589565b005b34801561016257600080fd5b5061017d60048036036101789190810190612e73565b610772565b005b34801561018b57600080fd5b506101a660048036036101a19190810190612d8c565b61095e565b005b3480156101b457600080fd5b506101bd610bfd565b6040516101d097969594939291906135be565b60405180910390f35b3480156101e557600080fd5b5061020060048036036101fb9190810190612d63565b6110cc565b005b34801561020e57600080fd5b5061022960048036036102249190810190612d63565b61128a565b60405161023893929190613a47565b60405180910390f35b34801561024d57600080fd5b5061026860048036036102639190810190612ed8565b6112b4565b005b34801561027657600080fd5b50610291600480360361028c9190810190612e9c565b611562565b60405161029e919061398e565b60405180910390f35b3480156102b357600080fd5b506102bc611605565b6040516102c991906134be565b60405180910390f35b3480156102de57600080fd5b506102f960048036036102f49190810190612e73565b61162b565b005b34801561030757600080fd5b50610322600480360361031d9190810190612e73565b6117db565b6040516103319392919061365e565b60405180910390f35b34801561034657600080fd5b50610361600480360361035c9190810190612d63565b611a0e565b60405161036e91906136aa565b60405180910390f35b34801561038357600080fd5b5061039e60048036036103999190810190612d63565b611a2e565b6040516103ad93929190613a47565b60405180910390f35b3480156103c257600080fd5b506103cb611a92565b6040516103d8919061398e565b60405180910390f35b3480156103ed57600080fd5b506103f6611a98565b60405161040391906134be565b60405180910390f35b34801561041857600080fd5b50610421611abe565b60405161043497969594939291906135be565b60405180910390f35b34801561044957600080fd5b50610452612034565b60405161046496959493929190613533565b60405180910390f35b34801561047957600080fd5b50610494600480360361048f9190810190612e73565b612413565b6040516104a59594939291906134d9565b60405180910390f35b3480156104ba57600080fd5b506104c361250e565b6040516104d0919061398e565b60405180910390f35b3480156104e557600080fd5b5061050060048036036104fb9190810190612d63565b612514565b005b34801561050e57600080fd5b5061052960048036036105249190810190612e73565b61261f565b60405161053d989796959493929190613742565b60405180910390f35b34801561055257600080fd5b5061056d60048036036105689190810190612e73565b6127d1565b60405161058097969594939291906136c5565b60405180910390f35b60006002600481111561059857fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660048111156105f057fe5b141515610632576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016106299061394e565b60405180910390fd5b6005600081548092919060010191905055905060a0604051908101604052803373ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001600015158152602001428152506002600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190805190602001906106fc929190612bc0565b506040820151816002015560608201518160030160006101000a81548160ff021916908315150217905550608082015181600401559050507f2ddbb339986374fc9bf3909872642de518a0a08cd2560940715ff15c40ab057b81336040516107659291906139a9565b60405180910390a1505050565b600060048081111561078057fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660048111156107d857fe5b14151561081a576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016108119061382e565b60405180910390fd5b60045482101515610860576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610857906137ee565b60405180910390fd5b60008083815260200190815260200160002090506000600381111561088157fe5b8160050160009054906101000a900460ff16600381111561089e57fe5b1415156108e0576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016108d7906138ee565b60405180910390fd5b60018160050160006101000a81548160ff0219169083600381111561090157fe5b021790555060018160070160006101000a81548160ff0219169083151502179055507f2e95ff525bf51f8595164ad590997b1ff10e4aa2ed25fba13ba27b6b93ab8b8d82604051610952919061398e565b60405180910390a15050565b6000806003600481111561096e57fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660048111156109c657fe5b141515610a08576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016109ff9061396e565b60405180910390fd5b600083111515610a4d576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610a449061390e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515610abf576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610ab6906138ce565b60405180910390fd5b60046000815480929190600101919050559150600080838152602001908152602001600020905085816000019080519060200190610afe929190612c40565b5084816001019080519060200190610b17929190612c40565b50838160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508281600301819055506000816004018190555060008160050160006101000a81548160ff02191690836003811115610b8f57fe5b021790555042816006018190555060008160070160006101000a81548160ff0219169083151502179055507f9c14d67a13fc86b0b40a30e781f1e20be171771128dddf71f51b7181d6fc09f7828785604051610bed93929190613a09565b60405180910390a1505050505050565b60608060608060608060606000806000806000809450600093505b600454841015610c795760016003811115610c2f57fe5b60008086815260200190815260200160002060050160009054906101000a900460ff166003811115610c5d57fe5b1415610c6c5784806001019550505b8380600101945050610c18565b84604051908082528060200260200182016040528015610ca85781602001602082028038833980820191505090505b509b5084604051908082528060200260200182016040528015610cdf57816020015b6060815260200190600190039081610cca5790505b509a5084604051908082528060200260200182016040528015610d1657816020015b6060815260200190600190039081610d015790505b50995084604051908082528060200260200182016040528015610d485781602001602082028038833980820191505090505b50985084604051908082528060200260200182016040528015610d7a5781602001602082028038833980820191505090505b50975084604051908082528060200260200182016040528015610dac5781602001602082028038833980820191505090505b50965084604051908082528060200260200182016040528015610dde5781602001602082028038833980820191505090505b50955060009250600091505b6004548210156110be5760016003811115610e0157fe5b60008084815260200190815260200160002060050160009054906101000a900460ff166003811115610e2f57fe5b14156110b1576000808381526020019081526020016000209050818c84815181101515610e5857fe5b9060200190602002018181525050806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610efe5780601f10610ed357610100808354040283529160200191610efe565b820191906000526020600020905b815481529060010190602001808311610ee157829003601f168201915b50505050508b84815181101515610f1157fe5b90602001906020020181905250806001018054600181600116156101000203166002900480601f0160208091","04026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fb65780601f10610f8b57610100808354040283529160200191610fb6565b820191906000526020600020905b815481529060010190602001808311610f9957829003601f168201915b50505050508a84815181101515610fc957fe5b906020019060200201819052508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16898481518110151561100957fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508060030154888481518110151561105857fe5b90602001906020020181815250508060040154878481518110151561107957fe5b90602001906020020181815250508060060154868481518110151561109a57fe5b906020019060200201818152505082806001019350505b8180600101925050610dea565b505050505090919293949596565b600360048111156110d957fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600481111561113157fe5b141515611173576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161116a9061396e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156111e5576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016111dc9061388e565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083600481111561128257fe5b021790555050565b60036020528060005260406000206000915090508060000154908060010154908060020154905083565b6000600454831015156112fc576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016112f3906137ee565b60405180910390fd5b60008084815260200190815260200160002090506001600381111561131d57fe5b8160050160009054906101000a900460ff16600381111561133a57fe5b14151561137c576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016113739061380e565b60405180910390fd5b6000821115156113c1576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016113b89061386e565b60405180910390fd5b818160080160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550818160040160008282540192505081905550806009016060604051908101604052808481526020014281526020013373ffffffffffffffffffffffffffffffffffffffff1681525090806001815401808255809150509060018203906000526020600020906003020160009091929091909150600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050507fadd53d6ccd197895358001239bd399aa9d1ee9c51f46553ab4dcd5c1c97b902c833384604051611514939291906139d2565b60405180910390a18060030154816004015410151561155d5760028160050160006101000a81548160ff0219169083600381111561154e57fe5b021790555061155c836129e4565b5b505050565b6000600454831015156115aa576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016115a1906137ee565b60405180910390fd5b60008084815260200190815260200160002060080160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006003600481111561163a57fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600481111561169257fe5b1415156116d4576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016116cb9061396e565b60405180910390fd5b6005548210151561171a576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611711906138ae565b60405180910390fd5b6002600083815260200190815260200160002090508060030160009054906101000a900460ff16151515611783576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161177a9061392e565b60405180910390fd5b60018160030160006101000a81548160ff0219169083151502179055507f55c971b97ded00e351019593e8e1d1389b0ceba6371cf57babe10697e10a867f826040516117cf919061398e565b60405180910390a15050565b606080606060008060006004548710151561182b576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611822906137ee565b60405180910390fd5b600080888152602001908152602001600020925082600901805490509150816040519080825280602002602001820160405280156118785781602001602082028038833980820191505090505b509550816040519080825280602002602001820160405280156118aa5781602001602082028038833980820191505090505b509450816040519080825280602002602001820160405280156118dc5781602001602082028038833980820191505090505b509350600090505b81811015611a045782600901818154811015156118fd57fe5b906000526020600020906003020160000154868281518110151561191d57fe5b9060200190602002018181525050826009018181548110151561193c57fe5b906000526020600020906003020160010154858281518110151561195c57fe5b9060200190602002018181525050826009018181548110151561197b57fe5b906000526020600020906003020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684828151811015156119bb57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506118e4565b5050509193909250565b60016020528060005260406000206000915054906101000a900460ff1681565b600080600080600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015481600101548260020154935093509350509193909250565b60055481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60608060608060608060606000806000806000600480811115611add57fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166004811115611b3557fe5b141515611b77576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611b6e9061382e565b60405180910390fd5b60009450600093505b600454841015611be15760006003811115611b9757fe5b60008086815260200190815260200160002060050160009054906101000a900460ff166003811115611bc557fe5b1415611bd45784806001019550505b8380600101945050611b80565b84604051908082528060200260200182016040528015611c105781602001602082028038833980820191505090505b509b5084604051908082528060200260200182016040528015611c4757816020015b6060815260200190600190039081611c325790505b509a5084604051908082528060200260200182016040528015611c7e57816020015b6060815260200190600190039081611c695790505b50995084604051908082528060200260200182016040528015611cb05781602001602082028038833980820191505090505b50985084604051908082528060200260200182016040528015611ce25781602001602082028038833980820191505090505b50975084604051908082528060200260200182016040528015611d145781602001602082028038833980820191505090505b50965084604051908082528060200260200182016040528015611d465781602001602082028038833980820191505090505b50955060009250600091505b6004548210156120265760006003811115611d6957fe5b60008084815260200190815260200160002060050160009054906101000a900460ff166003811115611d9757fe5b1415612019576000808381526020019081526020016000209050818c84815181101515611dc057fe5b9060200190602002018181525050806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e665780601f10611e3b57610100808354040283529160200191611e66565b820191906000526020600020905b815481529060010190602001808311611e4957829003601f168201915b50505050508b84815181101515611e7957fe5b90602001906020020181905250806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f1e5780601f10611ef357610100808354040283529160200191611f1e565b820191906000526020600020905b815481529060010190602001808311611f0157829003601f168201915b50505050508a84815181101515611f3157fe5b906020019060200201819052","508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168984815181101515611f7157fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080600301548884815181101515611fc057fe5b906020019060200201818152505080600401548784815181101515611fe157fe5b90602001906020020181815250508060060154868481518110151561200257fe5b906020019060200201818152505082806001019350505b8180600101925050611d52565b505050505090919293949596565b60608060608060608060008060006003600481111561204f57fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660048111156120a757fe5b1415156120e9576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016120e09061396e565b60405180910390fd5b60055492508260405190808252806020026020018201604052801561211d5781602001602082028038833980820191505090505b5098508260405190808252806020026020018201604052801561214f5781602001602082028038833980820191505090505b5097508260405190808252806020026020018201604052801561218657816020015b60608152602001906001900390816121715790505b509650826040519080825280602002602001820160405280156121b85781602001602082028038833980820191505090505b509550826040519080825280602002602001820160405280156121ea5781602001602082028038833980820191505090505b5094508260405190808252806020026020018201604052801561221c5781602001602082028038833980820191505090505b509350600091505b828210156124085760026000838152602001908152602001600020905081898381518110151561225057fe5b90602001906020020181815250508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16888381518110151561229157fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123655780601f1061233a57610100808354040283529160200191612365565b820191906000526020600020905b81548152906001019060200180831161234857829003601f168201915b5050505050878381518110151561237857fe5b906020019060200201819052508060020154868381518110151561239857fe5b90602001906020020181815250508060030160009054906101000a900460ff1685838151811015156123c657fe5b9060200190602002019015159081151581525050806004015484838151811015156123ed57fe5b90602001906020020181815250508180600101925050612224565b505050909192939495565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124e55780601f106124ba576101008083540402835291602001916124e5565b820191906000526020600020905b8154815290600101906020018083116124c857829003601f168201915b5050505050908060020154908060030160009054906101000a900460ff16908060040154905085565b60045481565b6003600481111561252157fe5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600481111561257957fe5b1415156125bb576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016125b29061396e565b60405180910390fd5b6002600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083600481111561261757fe5b021790555050565b6000602052806000526040600020600091509050806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126cb5780601f106126a0576101008083540402835291602001916126cb565b820191906000526020600020905b8154815290600101906020018083116126ae57829003601f168201915b505050505090806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127695780601f1061273e57610100808354040283529160200191612769565b820191906000526020600020905b81548152906001019060200180831161274c57829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040154908060050160009054906101000a900460ff16908060060154908060070160009054906101000a900460ff16905088565b60608060008060008060008060045489101515612823576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161281a906137ee565b60405180910390fd5b6000808a8152602001908152602001600020905080600001816001018260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836003015484600401548560050160009054906101000a900460ff168660070160009054906101000a900460ff16868054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129275780601f106128fc57610100808354040283529160200191612927565b820191906000526020600020905b81548152906001019060200180831161290a57829003601f168201915b50505050509650858054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129c35780601f10612998576101008083540402835291602001916129c3565b820191906000526020600020905b8154815290600101906020018083116129a657829003601f168201915b50505050509550975097509750975097509750975050919395979092949650565b600080600080848152602001908152602001600020915060026003811115612a0857fe5b8260050160009054906101000a900460ff166003811115612a2557fe5b141515612a67576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401612a5e906137ce565b60405180910390fd5b60008260040154111515612ab0576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401612aa79061384e565b60405180910390fd5b81600401549050612ae58260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612b49565b7ff6c87008203e7a977a1db7dee55c6f05997ae4e49ff70dafda29eb0a615a6534838360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683604051612b3c939291906139d2565b60405180910390a1505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600001600082825401925050819055504281600101819055508060020160008154809291906001019190505550505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c0157805160ff1916838001178555612c2f565b82800160010185558215612c2f579182015b82811115612c2e578251825591602001919060010190612c13565b5b509050612c3c9190612cc0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c8157805160ff1916838001178555612caf565b82800160010185558215612caf579182015b82811115612cae578251825591602001919060010190612c93565b5b509050612cbc9190612cc0565b5090565b612ce291905b80821115612cde576000816000905550600101612cc6565b5090565b90565b6000612cf18235613be3565b905092915050565b600082601f8301121515612d0c57600080fd5b8135612d1f612d1a82613aab565b613a7e565b91508082526020830160208301858383011115612d3b57600080fd5b612d46838284613c31565b50505092915050565b6000612d5b8235613c03565b905092915050565b600060208284031215612d7557600080fd5b6000612d8384828501612ce5565b91505092915050565b60008060008060808587031215612da257600080fd5b600085013567ffffffffffffffff811115612dbc57600080fd5b612dc887828801612cf9565b945050602085013567ffffffffffffffff811115612de557600080fd5b612df187828801612cf9565b9350506040612e0287828801612ce5565b9250506060612e1387828801612d4f565b91505092959194509250565b60008060408385031215612e3257600080fd5b600083013567ffffffffffffffff811115612e4c57600080fd5b612e5885828601612cf9565b9250506020612e6985828601612d4f565b9150509250929050565b600060208284031215612e8557600080fd5b6000612e9384828501612d4f565b91505092915050565b60008060408385031215612eaf57600080fd5b6000612ebd85828601612d4f565b9250506020612ece85828601612ce5565b9150509250929050565b60008060408385031215612eeb57600080fd5b6000612ef985828601612d4f565b9250506020612f0a85828601612d4f565b9150509250929050565b612f1d81613b81565b82525050565b6000612f2e82613b0b565b808452602084019350612f4083613a","d7565b60005b82811015612f7257612f56868351612f14565b612f5f82613b4d565b9150602086019550600181019050612f43565b50849250505092915050565b6000612f8982613b16565b808452602084019350612f9b83613ae4565b60005b82811015612fcd57612fb18683516130a2565b612fba82613b5a565b9150602086019550600181019050612f9e565b50849250505092915050565b6000612fe482613b21565b80845260208401935083602082028501612ffd85613af1565b60005b84811015613036578383038852613018838351613105565b925061302382613b67565b9150602088019750600181019050613000565b508196508694505050505092915050565b600061305282613b2c565b80845260208401935061306483613afe565b60005b828110156130965761307a8683516134af565b61308382613b74565b9150602086019550600181019050613067565b50849250505092915050565b6130ab81613ba1565b82525050565b6130ba81613c0d565b82525050565b6130c981613c1f565b82525050565b60006130da82613b42565b8084526130ee816020860160208601613c40565b6130f781613c73565b602085010191505092915050565b600061311082613b37565b808452613124816020860160208601613c40565b61312d81613c73565b602085010191505092915050565b6000601882527f50726f6a656374206973206e6f7420636f6d706c6574656400000000000000006020830152604082019050919050565b6000601682527f50726f6a65637420646f6573206e6f74206578697374000000000000000000006020830152604082019050919050565b6000601582527f50726f6a656374206973206e6f742061637469766500000000000000000000006020830152604082019050919050565b6000601c82527f4f6e6c7920726567756c61746f722063616e2063616c6c2074686973000000006020830152604082019050919050565b6000601382527f4e6f2066756e647320746f2072656c65617365000000000000000000000000006020830152604082019050919050565b6000602682527f446f6e6174696f6e20616d6f756e74206d75737420626520677265617465722060208301527f7468616e203000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000600f82527f496e76616c6964206164647265737300000000000000000000000000000000006020830152604082019050919050565b6000601a82527f4170706c69636174696f6e20646f6573206e6f742065786973740000000000006020830152604082019050919050565b6000601b82527f496e76616c69642062656e6566696369617279206164647265737300000000006020830152604082019050919050565b6000601682527f50726f6a656374206973206e6f742070656e64696e67000000000000000000006020830152604082019050919050565b6000602482527f54617267657420616d6f756e74206d757374206265206772656174657220746860208301527f616e2030000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000601c82527f4170706c69636174696f6e20616c726561647920617070726f766564000000006020830152604082019050919050565b6000601c82527f4f6e6c792062656e656669636961726965732063616e206170706c79000000006020830152604082019050919050565b6000602782527f4f6e6c792063686172697479206f7267616e697a6174696f6e2063616e20636160208301527f6c6c2074686973000000000000000000000000000000000000000000000000006040830152606082019050919050565b6134b881613bd9565b82525050565b60006020820190506134d36000830184612f14565b92915050565b600060a0820190506134ee6000830188612f14565b81810360208301526135008187613105565b905061350f60408301866134af565b61351c60608301856130a2565b61352960808301846134af565b9695505050505050565b600060c082019050818103600083015261354d8189613047565b905081810360208301526135618188612f23565b905081810360408301526135758187612fd9565b905081810360608301526135898186613047565b9050818103608083015261359d8185612f7e565b905081810360a08301526135b18184613047565b9050979650505050505050565b600060e08201905081810360008301526135d8818a613047565b905081810360208301526135ec8189612fd9565b905081810360408301526136008188612fd9565b905081810360608301526136148187612f23565b905081810360808301526136288186613047565b905081810360a083015261363c8185613047565b905081810360c08301526136508184613047565b905098975050505050505050565b600060608201905081810360008301526136788186613047565b9050818103602083015261368c8185613047565b905081810360408301526136a08184612f23565b9050949350505050565b60006020820190506136bf60008301846130c0565b92915050565b600060e08201905081810360008301526136df818a6130cf565b905081810360208301526136f381896130cf565b90506137026040830188612f14565b61370f60608301876134af565b61371c60808301866134af565b61372960a08301856130b1565b61373660c08301846130a2565b98975050505050505050565b600061010082019050818103600083015261375d818b613105565b90508181036020830152613771818a613105565b90506137806040830189612f14565b61378d60608301886134af565b61379a60808301876134af565b6137a760a08301866130b1565b6137b460c08301856134af565b6137c160e08301846130a2565b9998505050505050505050565b600060208201905081810360008301526137e78161313b565b9050919050565b6000602082019050818103600083015261380781613172565b9050919050565b60006020820190508181036000830152613827816131a9565b9050919050565b60006020820190508181036000830152613847816131e0565b9050919050565b6000602082019050818103600083015261386781613217565b9050919050565b600060208201905081810360008301526138878161324e565b9050919050565b600060208201905081810360008301526138a7816132ab565b9050919050565b600060208201905081810360008301526138c7816132e2565b9050919050565b600060208201905081810360008301526138e781613319565b9050919050565b6000602082019050818103600083015261390781613350565b9050919050565b6000602082019050818103600083015261392781613387565b9050919050565b60006020820190508181036000830152613947816133e4565b9050919050565b600060208201905081810360008301526139678161341b565b9050919050565b6000602082019050818103600083015261398781613452565b9050919050565b60006020820190506139a360008301846134af565b92915050565b60006040820190506139be60008301856134af565b6139cb6020830184612f14565b9392505050565b60006060820190506139e760008301866134af565b6139f46020830185612f14565b613a0160408301846134af565b949350505050565b6000606082019050613a1e60008301866134af565b8181036020830152613a3081856130cf565b9050613a3f60408301846134af565b949350505050565b6000606082019050613a5c60008301866134af565b613a6960208301856134af565b613a7660408301846134af565b949350505050565b6000604051905081810181811067ffffffffffffffff82111715613aa157600080fd5b8060405250919050565b600067ffffffffffffffff821115613ac257600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000600482101515613bbb57fe5b819050919050565b6000600582101515613bd157fe5b819050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613c1882613bad565b9050919050565b6000613c2a82613bc3565b9050919050565b82818337600083830152505050565b60005b83811015613c5e578082015181840152602081019050613c43565b83811115613c6d576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a72305820843036dffe3e90fd17ef1e96b6f2a45a62e10f8b4ae286ff7413f949ed4a49ad6c6578706572696d656e74616cf50037"};

    public static final String SM_BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"constant\":false,\"inputs\":[{\"name\":\"projectId\",\"type\":\"uint256\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"donate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"applicationId\",\"type\":\"uint256\"}],\"name\":\"approveApplication\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"projectCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"beneficiaryStats\",\"outputs\":[{\"name\":\"totalReceived\",\"type\":\"uint256\"},{\"name\":\"lastReceiveTime\",\"type\":\"uint256\"},{\"name\":\"receiveCount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"donationProjects\",\"outputs\":[{\"name\":\"projectName\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"beneficiary\",\"type\":\"address\"},{\"name\":\"targetAmount\",\"type\":\"uint256\"},{\"name\":\"raisedAmount\",\"type\":\"uint256\"},{\"name\":\"status\",\"type\":\"uint8\"},{\"name\":\"createdAt\",\"type\":\"uint256\"},{\"name\":\"isApproved\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAllApplications\",\"outputs\":[{\"name\":\"applicationIds\",\"type\":\"uint256[]\"},{\"name\":\"applicants\",\"type\":\"address[]\"},{\"name\":\"descriptions\",\"type\":\"string[]\"},{\"name\":\"requestedAmounts\",\"type\":\"uint256[]\"},{\"name\":\"isApproveds\",\"type\":\"bool[]\"},{\"name\":\"applicationTimes\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAllPendingProjects\",\"outputs\":[{\"name\":\"projectIds\",\"type\":\"uint256[]\"},{\"name\":\"projectNames\",\"type\":\"string[]\"},{\"name\":\"descriptions\",\"type\":\"string[]\"},{\"name\":\"beneficiaries\",\"type\":\"address[]\"},{\"name\":\"targetAmounts\",\"type\":\"uint256[]\"},{\"name\":\"raisedAmounts\",\"type\":\"uint256[]\"},{\"name\":\"createdAts\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"projectName\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"beneficiary\",\"type\":\"address\"},{\"name\":\"targetAmount\",\"type\":\"uint256\"}],\"name\":\"createDonationProject\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"projectId\",\"type\":\"uint256\"}],\"name\":\"getProjectDetails\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"getBeneficiaryStats\",\"outputs\":[{\"name\":\"totalReceived\",\"type\":\"uint256\"},{\"name\":\"lastReceiveTime\",\"type\":\"uint256\"},{\"name\":\"receiveCount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"userRoles\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"requestedAmount\",\"type\":\"uint256\"}],\"name\":\"submitApplication\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"projectId\",\"type\":\"uint256\"}],\"name\":\"getDonationRecords\",\"outputs\":[{\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"name\":\"timestamps\",\"type\":\"uint256[]\"},{\"name\":\"donors\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_beneficiary\",\"type\":\"address\"}],\"name\":\"registerBeneficiary\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_regulator\",\"type\":\"address\"}],\"name\":\"setRegulator\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"regulator\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"applications\",\"outputs\":[{\"name\":\"applicant\",\"type\":\"address\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"requestedAmount\",\"type\":\"uint256\"},{\"name\":\"isApproved\",\"type\":\"bool\"},{\"name\":\"applicationTime\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"applicationCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"projectId\",\"type\":\"uint256\"},{\"name\":\"donor\",\"type\":\"address\"}],\"name\":\"getDonationAmount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAllActiveProjects\",\"outputs\":[{\"name\":\"projectIds\",\"type\":\"uint256[]\"},{\"name\":\"projectNames\",\"type\":\"string[]\"},{\"name\":\"descriptions\",\"type\":\"string[]\"},{\"name\":\"beneficiaries\",\"type\":\"address[]\"},{\"name\":\"targetAmounts\",\"type\":\"uint256[]\"},{\"name\":\"raisedAmounts\",\"type\":\"uint256[]\"},{\"name\":\"createdAts\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"projectId\",\"type\":\"uint256\"}],\"name\":\"approveProject\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"charityOrg\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"projectId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"projectName\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"targetAmount\",\"type\":\"uint256\"}],\"name\":\"ProjectCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"projectId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"donor\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"DonationMade\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"applicationId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"applicant\",\"type\":\"address\"}],\"name\":\"ApplicationSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"applicationId\",\"type\":\"uint256\"}],\"name\":\"ApplicationApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"projectId\",\"type\":\"uint256\"}],\"name\":\"ProjectApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"projectId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsReleased\",\"type\":\"event\"}]"};

    public static final String ABI = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", ABI_ARRAY);

    public static final String FUNC_DONATE = "donate";

    public static final String FUNC_APPROVEAPPLICATION = "approveApplication";

    public static final String FUNC_PROJECTCOUNT = "projectCount";

    public static final String FUNC_BENEFICIARYSTATS = "beneficiaryStats";

    public static final String FUNC_DONATIONPROJECTS = "donationProjects";

    public static final String FUNC_GETALLAPPLICATIONS = "getAllApplications";

    public static final String FUNC_GETALLPENDINGPROJECTS = "getAllPendingProjects";

    public static final String FUNC_CREATEDONATIONPROJECT = "createDonationProject";

    public static final String FUNC_GETPROJECTDETAILS = "getProjectDetails";

    public static final String FUNC_GETBENEFICIARYSTATS = "getBeneficiaryStats";

    public static final String FUNC_USERROLES = "userRoles";

    public static final String FUNC_SUBMITAPPLICATION = "submitApplication";

    public static final String FUNC_GETDONATIONRECORDS = "getDonationRecords";

    public static final String FUNC_REGISTERBENEFICIARY = "registerBeneficiary";

    public static final String FUNC_SETREGULATOR = "setRegulator";

    public static final String FUNC_REGULATOR = "regulator";

    public static final String FUNC_APPLICATIONS = "applications";

    public static final String FUNC_APPLICATIONCOUNT = "applicationCount";

    public static final String FUNC_GETDONATIONAMOUNT = "getDonationAmount";

    public static final String FUNC_GETALLACTIVEPROJECTS = "getAllActiveProjects";

    public static final String FUNC_APPROVEPROJECT = "approveProject";

    public static final String FUNC_CHARITYORG = "charityOrg";

    public static final Event PROJECTCREATED_EVENT = new Event("ProjectCreated", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}));
    ;

    public static final Event DONATIONMADE_EVENT = new Event("DonationMade", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
    ;

    public static final Event APPLICATIONSUBMITTED_EVENT = new Event("ApplicationSubmitted", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}));
    ;

    public static final Event APPLICATIONAPPROVED_EVENT = new Event("ApplicationApproved", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
    ;

    public static final Event PROJECTAPPROVED_EVENT = new Event("ProjectApproved", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
    ;

    public static final Event FUNDSRELEASED_EVENT = new Event("FundsReleased", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
    ;

    protected CharityDonation(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public TransactionReceipt donate(BigInteger projectId, BigInteger amount) {
        final Function function = new Function(
                FUNC_DONATE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(amount)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] donate(BigInteger projectId, BigInteger amount, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_DONATE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(amount)), 
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForDonate(BigInteger projectId, BigInteger amount) {
        final Function function = new Function(
                FUNC_DONATE, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(amount)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<BigInteger, BigInteger> getDonateInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_DONATE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<BigInteger, BigInteger>(

                (BigInteger) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue()
                );
    }

    public TransactionReceipt approveApplication(BigInteger applicationId) {
        final Function function = new Function(
                FUNC_APPROVEAPPLICATION, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(applicationId)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] approveApplication(BigInteger applicationId, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_APPROVEAPPLICATION, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(applicationId)), 
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForApproveApplication(BigInteger applicationId) {
        final Function function = new Function(
                FUNC_APPROVEAPPLICATION, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(applicationId)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getApproveApplicationInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_APPROVEAPPLICATION, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public BigInteger projectCount() throws ContractException {
        final Function function = new Function(FUNC_PROJECTCOUNT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public Tuple3<BigInteger, BigInteger, BigInteger> beneficiaryStats(String param0) throws ContractException {
        final Function function = new Function(FUNC_BENEFICIARYSTATS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(param0)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple3<BigInteger, BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue());
    }

    public Tuple8<String, String, String, BigInteger, BigInteger, BigInteger, BigInteger, Boolean> donationProjects(BigInteger param0) throws ContractException {
        final Function function = new Function(FUNC_DONATIONPROJECTS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(param0)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint8>() {}, new TypeReference<Uint256>() {}, new TypeReference<Bool>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple8<String, String, String, BigInteger, BigInteger, BigInteger, BigInteger, Boolean>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (BigInteger) results.get(3).getValue(), 
                (BigInteger) results.get(4).getValue(), 
                (BigInteger) results.get(5).getValue(), 
                (BigInteger) results.get(6).getValue(), 
                (Boolean) results.get(7).getValue());
    }

    public Tuple6<List<BigInteger>, List<String>, List<String>, List<BigInteger>, List<Boolean>, List<BigInteger>> getAllApplications() throws ContractException {
        final Function function = new Function(FUNC_GETALLAPPLICATIONS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint256>>() {}, new TypeReference<DynamicArray<Address>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Uint256>>() {}, new TypeReference<DynamicArray<Bool>>() {}, new TypeReference<DynamicArray<Uint256>>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple6<List<BigInteger>, List<String>, List<String>, List<BigInteger>, List<Boolean>, List<BigInteger>>(
                convertToNative((List<Uint256>) results.get(0).getValue()), 
                convertToNative((List<Address>) results.get(1).getValue()), 
                convertToNative((List<Utf8String>) results.get(2).getValue()), 
                convertToNative((List<Uint256>) results.get(3).getValue()), 
                convertToNative((List<Bool>) results.get(4).getValue()), 
                convertToNative((List<Uint256>) results.get(5).getValue()));
    }

    public Tuple7<List<BigInteger>, List<String>, List<String>, List<String>, List<BigInteger>, List<BigInteger>, List<BigInteger>> getAllPendingProjects() throws ContractException {
        final Function function = new Function(FUNC_GETALLPENDINGPROJECTS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint256>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Address>>() {}, new TypeReference<DynamicArray<Uint256>>() {}, new TypeReference<DynamicArray<Uint256>>() {}, new TypeReference<DynamicArray<Uint256>>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple7<List<BigInteger>, List<String>, List<String>, List<String>, List<BigInteger>, List<BigInteger>, List<BigInteger>>(
                convertToNative((List<Uint256>) results.get(0).getValue()), 
                convertToNative((List<Utf8String>) results.get(1).getValue()), 
                convertToNative((List<Utf8String>) results.get(2).getValue()), 
                convertToNative((List<Address>) results.get(3).getValue()), 
                convertToNative((List<Uint256>) results.get(4).getValue()), 
                convertToNative((List<Uint256>) results.get(5).getValue()), 
                convertToNative((List<Uint256>) results.get(6).getValue()));
    }

    public TransactionReceipt createDonationProject(String projectName, String description, String beneficiary, BigInteger targetAmount) {
        final Function function = new Function(
                FUNC_CREATEDONATIONPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(projectName), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(description), 
                new org.fisco.bcos.sdk.abi.datatypes.Address(beneficiary), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(targetAmount)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] createDonationProject(String projectName, String description, String beneficiary, BigInteger targetAmount, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_CREATEDONATIONPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(projectName), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(description), 
                new org.fisco.bcos.sdk.abi.datatypes.Address(beneficiary), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(targetAmount)), 
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForCreateDonationProject(String projectName, String description, String beneficiary, BigInteger targetAmount) {
        final Function function = new Function(
                FUNC_CREATEDONATIONPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(projectName), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(description), 
                new org.fisco.bcos.sdk.abi.datatypes.Address(beneficiary), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(targetAmount)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple4<String, String, String, BigInteger> getCreateDonationProjectInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_CREATEDONATIONPROJECT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, String, String, BigInteger>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (BigInteger) results.get(3).getValue()
                );
    }

    public Tuple7<String, String, String, BigInteger, BigInteger, BigInteger, Boolean> getProjectDetails(BigInteger projectId) throws ContractException {
        final Function function = new Function(FUNC_GETPROJECTDETAILS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(projectId)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint8>() {}, new TypeReference<Bool>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple7<String, String, String, BigInteger, BigInteger, BigInteger, Boolean>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (BigInteger) results.get(3).getValue(), 
                (BigInteger) results.get(4).getValue(), 
                (BigInteger) results.get(5).getValue(), 
                (Boolean) results.get(6).getValue());
    }

    public Tuple3<BigInteger, BigInteger, BigInteger> getBeneficiaryStats(String beneficiary) throws ContractException {
        final Function function = new Function(FUNC_GETBENEFICIARYSTATS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(beneficiary)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple3<BigInteger, BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue());
    }

    public BigInteger userRoles(String param0) throws ContractException {
        final Function function = new Function(FUNC_USERROLES, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(param0)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public TransactionReceipt submitApplication(String description, BigInteger requestedAmount) {
        final Function function = new Function(
                FUNC_SUBMITAPPLICATION, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(description), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(requestedAmount)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] submitApplication(String description, BigInteger requestedAmount, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_SUBMITAPPLICATION, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(description), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(requestedAmount)), 
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForSubmitApplication(String description, BigInteger requestedAmount) {
        final Function function = new Function(
                FUNC_SUBMITAPPLICATION, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(description), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(requestedAmount)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, BigInteger> getSubmitApplicationInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_SUBMITAPPLICATION, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, BigInteger>(

                (String) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue()
                );
    }

    public Tuple3<List<BigInteger>, List<BigInteger>, List<String>> getDonationRecords(BigInteger projectId) throws ContractException {
        final Function function = new Function(FUNC_GETDONATIONRECORDS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(projectId)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint256>>() {}, new TypeReference<DynamicArray<Uint256>>() {}, new TypeReference<DynamicArray<Address>>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple3<List<BigInteger>, List<BigInteger>, List<String>>(
                convertToNative((List<Uint256>) results.get(0).getValue()), 
                convertToNative((List<Uint256>) results.get(1).getValue()), 
                convertToNative((List<Address>) results.get(2).getValue()));
    }

    public TransactionReceipt registerBeneficiary(String _beneficiary) {
        final Function function = new Function(
                FUNC_REGISTERBENEFICIARY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(_beneficiary)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] registerBeneficiary(String _beneficiary, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REGISTERBENEFICIARY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(_beneficiary)), 
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRegisterBeneficiary(String _beneficiary) {
        final Function function = new Function(
                FUNC_REGISTERBENEFICIARY, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(_beneficiary)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getRegisterBeneficiaryInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REGISTERBENEFICIARY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public TransactionReceipt setRegulator(String _regulator) {
        final Function function = new Function(
                FUNC_SETREGULATOR, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(_regulator)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] setRegulator(String _regulator, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_SETREGULATOR, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(_regulator)), 
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForSetRegulator(String _regulator) {
        final Function function = new Function(
                FUNC_SETREGULATOR, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(_regulator)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getSetRegulatorInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_SETREGULATOR, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public String regulator() throws ContractException {
        final Function function = new Function(FUNC_REGULATOR, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public Tuple5<String, String, BigInteger, Boolean, BigInteger> applications(BigInteger param0) throws ContractException {
        final Function function = new Function(FUNC_APPLICATIONS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(param0)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}, new TypeReference<Bool>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple5<String, String, BigInteger, Boolean, BigInteger>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (Boolean) results.get(3).getValue(), 
                (BigInteger) results.get(4).getValue());
    }

    public BigInteger applicationCount() throws ContractException {
        final Function function = new Function(FUNC_APPLICATIONCOUNT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public BigInteger getDonationAmount(BigInteger projectId, String donor) throws ContractException {
        final Function function = new Function(FUNC_GETDONATIONAMOUNT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.Address(donor)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public Tuple7<List<BigInteger>, List<String>, List<String>, List<String>, List<BigInteger>, List<BigInteger>, List<BigInteger>> getAllActiveProjects() {
        final Function function = new Function(FUNC_GETALLACTIVEPROJECTS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint256>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Address>>() {}, new TypeReference<DynamicArray<Uint256>>() {}, new TypeReference<DynamicArray<Uint256>>() {}, new TypeReference<DynamicArray<Uint256>>() {}));
        List<Type> results = null;
        try {
            results = executeCallWithMultipleValueReturn(function);
        } catch (ContractException e) {
            throw new RuntimeException(e);
        }
        return new Tuple7<List<BigInteger>, List<String>, List<String>, List<String>, List<BigInteger>, List<BigInteger>, List<BigInteger>>(
                convertToNative((List<Uint256>) results.get(0).getValue()), 
                convertToNative((List<Utf8String>) results.get(1).getValue()), 
                convertToNative((List<Utf8String>) results.get(2).getValue()), 
                convertToNative((List<Address>) results.get(3).getValue()), 
                convertToNative((List<Uint256>) results.get(4).getValue()), 
                convertToNative((List<Uint256>) results.get(5).getValue()), 
                convertToNative((List<Uint256>) results.get(6).getValue()));
    }

    public TransactionReceipt approveProject(BigInteger projectId) {
        final Function function = new Function(
                FUNC_APPROVEPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(projectId)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] approveProject(BigInteger projectId, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_APPROVEPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(projectId)), 
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForApproveProject(BigInteger projectId) {
        final Function function = new Function(
                FUNC_APPROVEPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(projectId)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getApproveProjectInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_APPROVEPROJECT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public String charityOrg() throws ContractException {
        final Function function = new Function(FUNC_CHARITYORG, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public List<ProjectCreatedEventResponse> getProjectCreatedEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(PROJECTCREATED_EVENT, transactionReceipt);
        ArrayList<ProjectCreatedEventResponse> responses = new ArrayList<ProjectCreatedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ProjectCreatedEventResponse typedResponse = new ProjectCreatedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.projectId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.projectName = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.targetAmount = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeProjectCreatedEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(PROJECTCREATED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeProjectCreatedEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(PROJECTCREATED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<DonationMadeEventResponse> getDonationMadeEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(DONATIONMADE_EVENT, transactionReceipt);
        ArrayList<DonationMadeEventResponse> responses = new ArrayList<DonationMadeEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            DonationMadeEventResponse typedResponse = new DonationMadeEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.projectId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.donor = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeDonationMadeEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(DONATIONMADE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeDonationMadeEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(DONATIONMADE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ApplicationSubmittedEventResponse> getApplicationSubmittedEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(APPLICATIONSUBMITTED_EVENT, transactionReceipt);
        ArrayList<ApplicationSubmittedEventResponse> responses = new ArrayList<ApplicationSubmittedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ApplicationSubmittedEventResponse typedResponse = new ApplicationSubmittedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.applicationId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.applicant = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeApplicationSubmittedEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(APPLICATIONSUBMITTED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeApplicationSubmittedEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(APPLICATIONSUBMITTED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ApplicationApprovedEventResponse> getApplicationApprovedEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(APPLICATIONAPPROVED_EVENT, transactionReceipt);
        ArrayList<ApplicationApprovedEventResponse> responses = new ArrayList<ApplicationApprovedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ApplicationApprovedEventResponse typedResponse = new ApplicationApprovedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.applicationId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeApplicationApprovedEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(APPLICATIONAPPROVED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeApplicationApprovedEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(APPLICATIONAPPROVED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ProjectApprovedEventResponse> getProjectApprovedEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(PROJECTAPPROVED_EVENT, transactionReceipt);
        ArrayList<ProjectApprovedEventResponse> responses = new ArrayList<ProjectApprovedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ProjectApprovedEventResponse typedResponse = new ProjectApprovedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.projectId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeProjectApprovedEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(PROJECTAPPROVED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeProjectApprovedEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(PROJECTAPPROVED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<FundsReleasedEventResponse> getFundsReleasedEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(FUNDSRELEASED_EVENT, transactionReceipt);
        ArrayList<FundsReleasedEventResponse> responses = new ArrayList<FundsReleasedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            FundsReleasedEventResponse typedResponse = new FundsReleasedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.projectId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.beneficiary = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeFundsReleasedEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(FUNDSRELEASED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeFundsReleasedEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(FUNDSRELEASED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public static CharityDonation load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new CharityDonation(contractAddress, client, credential);
    }

    public static CharityDonation deploy(Client client, CryptoKeyPair credential) throws ContractException {
        return deploy(CharityDonation.class, client, credential, getBinary(client.getCryptoSuite()), "");
    }

    public static class ProjectCreatedEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger projectId;

        public String projectName;

        public BigInteger targetAmount;
    }

    public static class DonationMadeEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger projectId;

        public String donor;

        public BigInteger amount;
    }

    public static class ApplicationSubmittedEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger applicationId;

        public String applicant;
    }

    public static class ApplicationApprovedEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger applicationId;
    }

    public static class ProjectApprovedEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger projectId;
    }

    public static class FundsReleasedEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger projectId;

        public String beneficiary;

        public BigInteger amount;
    }
}
